﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WCS.Infrastructure.Dto.Request.Epaylinks
{
    /// <summary>
    /// 商品订单信息类，包含商品订单的详细信息。
    /// </summary>
    public class EpaylinksOrderInfo
    {
        /// <summary>
        /// 商品订单编号，最长 32 个字符，为必填项。
        /// </summary>
        // [Required]
        [MaxLength(32)]
        public string Id { get; set; }

        /// <summary>
        /// 业务种类，参考附录“商品订单业务种类编码”，为必填项。
        /// </summary>
        [Required]
        public string BusinessType { get; set; }

        /// <summary>
        /// 订单原价，单位为分，可选填。
        /// </summary>
        public long? CostPrice { get; set; }

        /// <summary>
        /// 商品小票 ID，最长 32 个字符，可选填。
        /// </summary>
        [MaxLength(32)]
        public string? ReceiptId { get; set; }

        /// <summary>
        /// 微信订单优惠标记，最长 32 个字符，仅微信支付有效，可选填。
        /// </summary>
        [MaxLength(32)]
        public string? GoodsTag { get; set; }

        /// <summary>
        /// 订单商品列表，每个元素为一个 Goods 对象，为必填项。
        /// </summary>
        [Required]
        public List<EpaylinksGoods> GoodsList { get; set; } = new List<EpaylinksGoods>() { };

        /// <summary>
        /// 优惠明细参数，最长 512 个字符，用于补充支付宝优惠的营销参数，可选填。
        /// </summary>
        [MaxLength(512)]
        public string? PromoParams { get; set; }
    }

    /// <summary>
    /// 订单商品类，代表订单中的单个商品信息。
    /// </summary>
    public class EpaylinksGoods
    {
        /// <summary>
        /// 商品 ID，最长 20 个字符，单品优惠时为必需项。
        /// </summary>
        [MaxLength(20)]
        public string? GoodsId { get; set; }

        /// <summary>
        /// 商品名称，最长 20 个字符，为交易商品的真实名称，为必填项。
        /// </summary>
        [Required]
        [MaxLength(20)]
        public string Name { get; set; }

        /// <summary>
        /// 单价，单位为分，银联单品优惠时为必需项。
        /// </summary>
        public long? Price { get; set; }

        /// <summary>
        /// 商品数量，如有小数，保留 2 位，最长 14 个字符，为必填项。
        /// </summary>
        [Required]
        [MaxLength(14)]
        public string Number { get; set; }

        /// <summary>
        /// 商品金额，单位为分，为必填项。
        /// </summary>
        [Required]
        public long Amount { get; set; }

        /// <summary>
        /// 商品类目，可选填。
        /// </summary>
        public string? Category { get; set; }

        /// <summary>
        /// 商品说明，最长 100 个字符，可选填。
        /// </summary>
        [MaxLength(100)]
        public string? Remark { get; set; }
    }
}
